package de.g18.gruppe3.common.ldap;

import de.g18.gruppe3.common.exception.ServiceException;
import de.g18.gruppe3.common.exception.UserGroupNotFoundExeption;
import de.g18.gruppe3.common.exception.UserToUserGroupAssignmentFailException;
import de.g18.gruppe3.common.model.User;
import de.g18.gruppe3.common.model.UserGroup;

/**
 * LDAP-Schnittstelle zum arbeiten mit Benutzergruppen.
 *
 * @author <a href="mailto:kevinhuber.kh@gmail.com">Kevin Huber</a>
 */
public interface UserGroupService {

    /**
     * Sucht eine Benutzergruppe anhand ihres Namens
     *
     * @param aName Name der Benutzergruppe die gesucht werden soll
     *
     * @throws UserGroupNotFoundExeption Falls keine Benutzergruppe gefunden wurde
     */
    UserGroup getUserGroupByName(String aName) throws ServiceException, UserGroupNotFoundExeption;

    /**
     * Ordnet einen Benutzer einer Benutzergruppe zu
     *
     * @param aUserToAdd Benutzer der zugeordnet werden soll
     * @param aUserGroup Benutzergruppe zu der der Benutzer zugeordnet werden soll
     *
     * @throws UserToUserGroupAssignmentFailException Falls der Benutzer der Benutzergruppe bereits zugeordnet ist
     */
    void addUserToUserGroup(User aUserToAdd, UserGroup aUserGroup) throws ServiceException, UserToUserGroupAssignmentFailException;
}
